#include "MtxAdvance.h"

#ifndef __VECTOR4_H__
#define __VECTOR4_H__

namespace MTX
{
	class Vector4
	{
	public:
		inline Vector4()
			:x(0),y(0),z(0),w(0){}
		inline Vector4(float fX,float fY,float fZ,float fW)
			:x(fX),y(fY),z(fZ),w(fW){}
		inline Vector4(const Vector4& v)
			:x(v.x),y(v.y),z(v.z),w(v.w){}
		inline float operator[] (const int i) const;
		inline bool operator== (const Vector4& v) const;
		inline Vector4 operator- (void) const;
		inline Vector4 operator+ (const Vector4& v) const;
		inline Vector4 operator- (const Vector4& v) const;
		inline float operator* (const Vector4& v) const;
		inline Vector4 operator* (const float fScalar) const;
		inline Vector4 operator/ (const Vector4& v) const;
		inline Vector4 operator/ (const float fScalar) const;
		inline Vector4& operator+= (const Vector4& v);
		inline Vector4& operator-= (const Vector4& v);
		inline Vector4& operator*= (const Vector4& v);
		inline Vector4& operator*= (const float fScalar);
		inline Vector4& operator/= (const Vector4& v)         
		inline Vector4& operator/= (const float fScalar);
		inline Vector4 Cross(const Vector4& v) const;
		inline float Dot(const Vector4& v) const;
		inline float Length(void) const;
		inline bool Normalized(void) const;
		inline void Normalize(void);
		inline float Distance(const Vector4& v) const;
		inline bool IsZeroLength(void) const;

		//TO DO...
		//inline Vector4 operator* (const Matrix4& m) const;
		//inline Vector4& operator*= (const Matrix4& m);
	private:
		float x,y,z,w;
	};
}

#endif